package com.sxj.corejava.code07_面向对象.抽象类与接口;

/**
 * @author 石小俊
 * @date 2025年01月07日
 */
public class Test01_抽象类 {

    public static void main(String[] args) {
        Person man = new Man();
        man.show();

        Person woMan = new WoMan();
        woMan.show();

        // 抽象类不能实例化对象,即不能创建对象
        // Person person = new Person();
    }

}

abstract class Person{
    // 当前类是一个父类,专门用于封装所有子类共性的属性与方法
    // 该类不需要创建对象
    private String name;
    private int age;
    private String gender;
    private String phone;

    public Person() {
    }

    public Person(String name, int age, String gender, String phone) {
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.phone = phone;
    }

    // 当所有子类都重写了该方法,则该方法没有意义
    // 如何保证所有子类必须重写该方法?
    public abstract void show();

    public void test(){
        System.out.println("这是普通方法");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

class Man extends Person{
    public Man() {
    }

    public Man(String name, int age, String gender, String phone) {
        super(name, age, gender, phone);
    }

    public void show(){
        System.out.println("这是一个男人");
    }
}
 class WoMan extends Person{
    public WoMan() {
    }

    public WoMan(String name, int age, String gender, String phone) {
        super(name, age, gender, phone);
    }

    public void show(){
        System.out.println("这是一个女人");
    }
}